パソコン活用研究ラピュタへの道(アセンブラ、DOS、Windows、旧型PCの活用研究)
FM-7/8 復活作戦 F-BASIC(DISK BASIC)のDISKイメージファイルの作成
今回は、F-BASIC(DISK BASIC)のDISKイメージファイルの作成です。
1 XM7のサポートするフォーマット(D77フォーマット)
XM7では2DフォーマットとD77フォーマットのイメージファイルをサポートしています。
そのうちのD77フォーマットは、PC-88用のエミュレーターでよく使われているD88フォーマトと互換性のある
フォーマットです。D88フォーマットの詳細については、ぶーる牧場に解説されていますので、参照して下さい。
ここら辺の情報も必要になる時があるかもしれないので、必要な部分だけ以下に概説します。
(下記の表は、ぶーる牧場のD88技術情報のページの抜粋です)
イメージファイルD88 |
ヘッダー部 |
トラック部(0 TRACK) |
トラック部(1 TRACK) |
・
・
・ |
トラック部(83 TRACK) |
複数ディスクの場合、これらのファイルを連結します。 |
ヘッダー部(サイズ 2B0H) |
offset |
size(byte) |
内容 |
0000H |
17 |
ディスクの名前(ASCIIZ) |
0011H |
9 |
リザーブ( 00H ) |
001AH |
1 |
ライトプロテクトフラグ( 00H:なし, 10H:あり ) |
001BH |
1 |
ディスクの種類( 00H: 2D, 10H: 2DD, 20H: 2HD ) |
001CH |
4 (DWORD) |
ディスクのサイズ |
0020H |
4 (DWORD) * 164 |
トラックデータテーブル(0-163 tracks) |
トラック部(サイズ:可変) |
セクター部を必要数連結したもの |
|
セクター部(サイズ:可変) |
offset |
size(byte) |
内容 |
0000H |
1 |
IDのC シリンダー=トラックNo. |
0001H |
1 |
IDのH ディスクの表=0 裏面=1 |
0002H |
1 |
IDのR セクタNo. |
0003H |
1 |
IDのN 1 セクタ長256バイト |
0004H |
2 (WORD) |
このトラックに存在するセクターの数 |
0006H |
1 |
記録密度( 00H: 倍密度, 40H: 単密度 ) |
0007H |
1 |
DELETED DATA( 00H:ノーマル 10H:DELETED DATA ) |
0008H |
1 |
ステータス( 00H:ノーマルエンド,その他エラー[DISK BIOSが返すステータス]) |
0009H |
5 |
リザーブ( 00H ) |
000EH |
2 (WORD) |
セクターのサイズ |
0010H |
可変 |
(000EH)で示したサイズ分のデータ |
XM7(F-BASIC)で使うフォーマットのヘッダー部のダンプを参考までに掲載します。
$1Cから4バイトがディスクサイズで$73AB0です。
$20からトラックデータテーブルが始まっています(4バイトづつ)。最初のトラック0は$2B0、 トラック1は$18B0から
始まっていることがわかります。
ついでに、トラック0の最初のセクター(セクター1)のダンプを見てましょう
F-BASIC(FM-7/8 5”フロッピーの2Dフォーマット)では、
1セクタサイズが256バイト、
1トラックは32セクタ(表面16セクタ、裏面16セクタ)
となります。従って、セクタID(セクタ管理情報の最初の4バイト)は以下のように進んでいきます。
トラック0
表面 00 00 01 01 --> 00 00 02 01 --> 00 00 03 01 --> ............
--> 00 00 0F 01 --> 00 00 10 01
裏面 00 01 01 01 --> 00 01 02 01 --> 00 01 03 01 --> ............
--> 00 01 0F 01 --> 00 01 10 01
トラック1
表面 01 00 01 01 --> 01 00 02 01 --> 01 00 03 01 --> ............
--> 01 00 0F 01 --> 01 00 10 01
裏面 01 01 01 01 --> 01 01 02 01 --> 01 01 03 01 --> ............
--> 01 01 0F 01 --> 01 01 10 01
セクター管理情報の$0E,$0Fはセクタサイズで、F-BASIC用は00 01となります。
2 F-BASIC用のブランクディスクを作成
XM7の[Tools]-[Make Blank Disk]で、新規のブランクディスク(D77イメージファイル)を作成すると、アンフォーマット
のブランクディスクができます。このブランクディスクは、ヘッダー部の管理情報のみがある状態で、セクター部は
何も書かれていません(=アンフォーマット状態)
従って、まだF-BASICでは使えないディスクです。
というわけで、まずF-BASICで使えるようにフォーマットしてやらなければなりません。
ROMモードでの起動では、Disk関係のコマンドは使えないので、ここは力技でフォーマットしてしまいましょう。
ブランクディスクをバイナリエディタで読み込んで編集します。
セクタ部に、上記のルールに従って管理情報を書き込んで行きます。
ここはかなり面倒な作業です。昔昔、雑誌等のダンプリストをひたすら打ち込んだのを思い出しますね。
(それよりは楽?)
ルールはシンプルなので、面倒なら、フォーマット化プログラムを組んで、PCにやらせた方がいいかもしれませんね
(力技とどっちが早いかな)
というわけで、フォーマット済みのブランクディスクを作成するプログラム(mkblank.exe)を作りました。
mkblank.exeのダウンロード −>mkblank.lzh
makblank.exeの使い方
DOSプロンプト上で、作成したいディスクイメージファイル名を指定するだけです。
>mkblank file_name.d77
それも面倒(ですよね)なら、ネオOh!FM の恐怖の水曜日に配布ディスクのページがありますので、そこからos0.d77
というイメージファイルをダウンロードして来てください。このイメージファイルはF-BASIC用と同じフォーマットになって
います。
3 ディスクベーシクを抜く
Windowsマシンでは、例によってシリアル転送ソフトを起動して下さい。
FM-7/8にはDisk Basicで起動できるフロッピーを入れ、以下のプログラムを走らせて下さい。
このプログラムにより、フロッピーのトラック0のセクター1〜セクター32を抜き出し、シリアル転送します。
(セクター1〜32にIPLとDisk関係のコマンドが格納されています)
Windows側に転送されたデータは適当な名前でバイナリーデータとして保存して下さい。
あとは、先ほど作ったD77ブランクディスク(フォーマット済み)と、このバイナリデータを両方、バイナリエディタに読み込ませて
切り貼りです。
256バイトづつ切り取って(コピーして)、D77ブランクディスク(フォーマット済み)に貼り付けていきます。
たった32セクタ分(=32回)なのでわけはありませんね。
まず、バイナリデータの$0000〜$00FFを切り取り、D77ブランクディスクのトラック0、セクター1(のデータ領域 $2C0)に
貼り付けます。
次に、$0100〜$01FFを切り取り、セクター2のデータ領域($3D0)に貼り付けます。
これを$1F00〜$1FFF(−>セクター32へ)までやれば完了です。
4 試しに使ってみる
XM7を起動したら
[Drive0] --> [Open] --> (イメージファイル名を指定)
[File] --> [Reset(F12)]
で、Disk Basicが立ち上がるはずです。
ちなみに、os0.d77をベースにブランクディスクを作成した場合、FILES とすると DIR,
TYPE といったマシン語ファイル
が見えます。が、これらはF-BASICこれのLOADMで読み込んで使うことはできません。
目障りならKILLして構いません。
(ただこれらは、これで有用なものでもあるので、os0自身は別途DOSモードでお使い下さい)
TopPageへ
|